package com.yhh.college_information_platform.common;

import lombok.Getter;

/**
 * 响应状态码枚举
 *
 * @author yhh
 * @date 2025-10-05
 */
@Getter
public enum ResultCode {

    /**
     * 成功
     */
    SUCCESS(200, "操作成功"),

    /**
     * 失败
     */
    ERROR(500, "操作失败"),

    /**
     * 参数错误
     */
    PARAM_ERROR(400, "参数错误"),

    /**
     * 未授权
     */
    UNAUTHORIZED(401, "未授权，请先登录"),

    /**
     * 禁止访问
     */
    FORBIDDEN(403, "禁止访问"),

    /**
     * 资源不存在
     */
    NOT_FOUND(404, "资源不存在"),

    /**
     * 请求方法不支持
     */
    METHOD_NOT_ALLOWED(405, "请求方法不支持"),

    /**
     * Token过期
     */
    TOKEN_EXPIRED(4001, "Token已过期"),

    /**
     * Token无效
     */
    TOKEN_INVALID(4002, "Token无效"),

    /**
     * 用户名或密码错误
     */
    LOGIN_ERROR(4003, "学号或密码错误"),

    /**
     * 用户已存在
     */
    USER_EXIST(4004, "用户已存在"),

    /**
     * 用户不存在
     */
    USER_NOT_EXIST(4005, "用户不存在"),
    
    /**
     * 用户未找到
     */
    USER_NOT_FOUND(4005, "用户未找到"),
    
    /**
     * 邮箱已存在
     */
    EMAIL_EXIST(4009, "邮箱已被使用"),

    /**
     * 用户被禁用
     */
    USER_DISABLED(4006, "用户已被禁用"),

    /**
     * 权限不足
     */
    PERMISSION_DENIED(4007, "权限不足"),

    /**
     * 无权操作
     */
    NO_PERMISSION(4008, "无权操作"),

    /**
     * 系统错误
     */
    SYSTEM_ERROR(500, "系统错误"),

    /**
     * 文件上传失败
     */
    FILE_UPLOAD_ERROR(5001, "文件上传失败"),

    /**
     * 文件类型不支持
     */
    FILE_TYPE_ERROR(5002, "文件类型不支持"),

    /**
     * 文件大小超限
     */
    FILE_SIZE_ERROR(5003, "文件大小超出限制"),

    /**
     * 资料不存在
     */
    RESOURCE_NOT_FOUND(6001, "资料不存在"),

    /**
     * 资料待审核
     */
    RESOURCE_PENDING(6002, "资料待审核"),

    /**
     * 资料审核未通过
     */
    RESOURCE_REJECTED(6003, "资料审核未通过"),

    /**
     * 资料已下架
     */
    RESOURCE_OFFLINE(6004, "资料已下架"),

    /**
     * 分类不存在
     */
    CATEGORY_NOT_FOUND(7001, "分类不存在"),

    /**
     * 数据库操作失败
     */
    DATABASE_ERROR(8001, "数据库操作失败"),

    /**
     * 操作失败
     */
    OPERATION_ERROR(9001, "操作失败");

    private final Integer code;
    private final String message;

    ResultCode(Integer code, String message) {
        this.code = code;
        this.message = message;
    }
}
